﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using GestionBudget.Objects;

namespace GestionBudget
{
    public static class DictionnaireDonnees
    {
        private static List<Transaction> listeTransactions;
        private static List<Categorie> listeCategories;
        private static List<SousCategorie> listeSousCategories;
        private static List<Devise> listeDevises;
        private static List<Profil> listeProfils;

        public static List<Transaction> ListeTransactions
        {
            get
            {
                if (listeTransactions == null)
                {
                    listeTransactions = Transaction.ChargerListe();
                }
                return listeTransactions;
            }

        }

        public static List<Categorie> ListeCategories
        {
            get
            {
                if (listeCategories == null)
                {
                    listeCategories = Categorie.ChargerListe();
                    Categorie cat = Categorie.Creer();
                    cat.Description = "Alimentation";
                    cat.AttribuerIdentifiant();
                    cat = Categorie.Creer();
                    cat.Description = "Habitation";
                    cat.AttribuerIdentifiant();
                    cat = Categorie.Creer();
                    cat.Description = "Assurance";
                    cat.AttribuerIdentifiant();
                    cat = Categorie.Creer();
                    cat.Description = "Loisir";
                    cat.AttribuerIdentifiant();
                    cat = Categorie.Creer();
                    cat.Description = "Transport";
                    cat.AttribuerIdentifiant();
                    cat = Categorie.Creer();
                    cat.Description = "Éducation";
                    cat.AttribuerIdentifiant();
                    cat = Categorie.Creer();
                    cat.Description = "Épargne";
                    cat.AttribuerIdentifiant();
                    cat = Categorie.Creer();
                    cat.Description = "Salaire";
                    cat.AttribuerIdentifiant();
                    cat = Categorie.Creer();
                    cat.Description = "Divers";
                    cat.AttribuerIdentifiant();
                }
                return listeCategories; 
            }
        }

        public static List<SousCategorie> ListeSousCategories
        {
            get
            {
                if (listeSousCategories == null)
                {
                    listeSousCategories = SousCategorie.ChargerListe();
                }
                return listeSousCategories;
            }
        }

        public static List<Devise> ListeDevises
        {
            get
            {
                if (listeDevises == null)
                {
                    listeDevises = Devise.ChargerListe();
                }
                return listeDevises;
            }
        }

        public static List<Profil> ListeProfils
        {
            get
            {
                if (listeProfils == null)
                {
                    listeProfils = Profil.ChargerListe();
                }
                return listeProfils;
            }
        }

        public static void ToutSauvegarder()
        {
            foreach (ObjectPersistent transaction in listeTransactions.Where(trans => trans.EstNouveau || trans.EstModifie))
            {
                transaction.Sauvegarder();
            }
            //foreach (ObjectPersistent categorie in listeCategories.Where(trans => trans.EstNouveau || trans.EstModifie))
            //{
            //    categorie.Sauvegarder();
            //}
            foreach (ObjectPersistent sousCategorie in listeSousCategories.Where(trans => trans.EstNouveau || trans.EstModifie))
            {
                sousCategorie.Sauvegarder();
            }

            foreach (ObjectPersistent devise in listeDevises.Where(trans => trans.EstNouveau || trans.EstModifie))
            {
                devise.Sauvegarder();
            }

            foreach (ObjectPersistent profil in listeProfils.Where(trans => trans.EstNouveau || trans.EstModifie))
            {
                profil.Sauvegarder();
            }
        }

        public static void Supprimer(ObjectPersistent objectASupprimer)
        {
            objectASupprimer.Supprimer();
        }

        public static void AttribuerIdentifiant(ObjectPersistent objectPersistent)
        {
            objectPersistent.AttribuerIdentifiant();
        }

        public static void Clear()
        {
            listeTransactions = null;
            listeCategories = null;
            listeSousCategories = null;
            listeDevises = null;
            listeProfils = null;
        }
    }
}